home *** CD-ROM | disk | FTP | other *** search
/ Collection of Tools & Utilities / Collection of Tools and Utilities.iso / sound / zutil_f2.zip / FOSSY.ASM < prev    next >
Assembly Source File  |  1992-12-24  |  7KB  |  199 lines

  1. ;
  2. ;
  3. ;
  4. ; FOSSY.ASM
  5. ;
  6. ; Interruptroutine (c) Kolja Waschk 1992
  7. ; Programmrumpf (c) Martin Althaus, aus dem PC Profibuch/ext.ed. (Sybex)
  8. ;
  9. ; Fossy wartet darauf, dass eine bestimmte Zeichenkette
  10. ; mit der Transmit/no wait-Funktion des Fossiltreibers
  11. ; zum Modem geschickt wird.
  12. ; Wenn dem so ist, wird ein Zeichen (^=F3) in den Tastaturpuffer
  13. ; geschrieben, um einen Tastendruck zu simulieren.
  14. ;
  15. ; Assemblieren mit:
  16. ;
  17. ; MASM FOSSY
  18. ; LINK FOSSY
  19. ; EXE2BIN FOSSY FOSSY.COM
  20. ; DEL FOSSY.EXE
  21. ;
  22. ; installieren/deinstallieren mit "FOSSY"
  23. ; Installation in der Autoexec.Bat hat bei mir noch keine Probleme
  24. ; zutage gefoerdert. Aber unbedingt _vorher_ den Fossil installieren !
  25. ;
  26. fossil_int             equ     14h
  27. ;
  28. ;Beginn
  29. ;
  30. code            segment
  31.                 assume  cs:code, ds:code
  32.                 org 44h                    ;Environmentstring-
  33. umgebungsadr    dw      ?                  ;Pointer
  34.                 org 100h                   ;COM-Programm
  35.  
  36. fossy:       jmp installation           ;zuerst installieren
  37. ;
  38. ;Daten
  39. ;
  40. programm_name   db      'Fossy '
  41. copyright       db      '(C) Kolja Waschk/Martin Althaus 1992',0
  42. pseudo_command  db      'ZUTIL',13,0,0,0,0,0,0,0,0
  43. command_pos     dw      ?
  44. old_fossil_int  dw      ?,?
  45. prg_laenge      equ     offset copyright - offset programm_name
  46. cr              equ 13
  47. lf              equ 10
  48. ;
  49. ;neue Interrupts
  50. ;
  51. new_fossil_int   proc    far
  52.  
  53.                   cmp     ah,0bh           ;Unterfunktion "TX/no wait" ?
  54.                   je      test_for_pc      ;ja -> auf Pseudokommando testen
  55.  
  56. alt_int_patch:    jmp     dword ptr cs:old_fossil_int
  57.                                            ;alten Interrupt 
  58.                                            ;aufrufen
  59. ;
  60. ;Vergleich der zu sendenden Daten mit dem Pseudo-Kommando-String
  61. ;
  62. test_for_pc:    push bx
  63.                 mov bx, command_pos                ;Zeiger laden
  64.                 cmp al, cs:[bx]                    ;vergleichen
  65.                 je next_char                       ;passt -> Zeiger erhoehen
  66.                 mov bx, OFFSET pseudo_command      ;Zeiger zuruecksetzen
  67.                 mov command_pos, bx
  68.                 pop bx
  69.                 jmp dword ptr cs:old_fossil_int    ;weiter mit orig.Fossil
  70.  
  71. next_char:      inc bx
  72.                 cmp byte ptr cs:[bx],0             ;Ende des Strings ?
  73.                 je got_pc                          ;ja -> kompl. Kommando
  74.                 mov command_pos, bx                ;nein, weiter
  75.                 pop bx
  76.                 jmp dword ptr cs:old_fossil_int    ;weiter mit orig.Fossil
  77.  
  78. got_pc:         mov bx, OFFSET pseudo_command      ;Zeiger zuruecksetzen
  79.                 mov command_pos, bx
  80.                 push ds
  81.                 mov bx,0                           ;Keybd.Bufferzeiger lesen
  82.                 mov ds,bx
  83.                 mov bh, 04h
  84.                 mov bl, byte ptr ds:[041Ch]
  85.                 mov ds:[bx], 3D00h                 ;Zeichen in Buffer schreiben
  86.                 inc bl                             ;Zeiger erhoehen
  87.                 inc bl                             ;(keine Abfrage, ob Buffer
  88.                 cmp bl, 3Eh                        ;voll !)
  89.                 jne normal
  90.                 mov bl, 1Eh
  91. normal:         mov byte ptr ds:[041Ch], bl        ;Zeiger setzen
  92.                 pop ds
  93.                 pop bx
  94.                 jmp dword ptr cs:old_fossil_int    ;trotzdem noch weiter
  95.                                                    ;mit dem alten Fossil
  96.  
  97. new_fossil_int   endp
  98. ;
  99. ;Installation
  100. ;
  101. installation:           assume  ds:code
  102.                 push    cs                 ;setze die Segmente
  103.                 pop     ds                 ;DS=CS
  104. ;
  105. ;schon installiert ?
  106. ;
  107.                 mov     al,fossil_int      ;gewünschter neuer
  108.                 mov     ah,35h             ;Interrupt wird über
  109.                 int     21h                ;INT 21h gesucht
  110. ;
  111. ;vergleiche Interrupt: ist er von FOSSY benutzt ?
  112. ;
  113.                 lea     di,programm_name   ;ES:DI zeigt auf Prgname
  114.                 mov     si,di
  115.                 mov     cx,prg_laenge      ;Länge des Namens
  116.                 repe    cmpsb              ;vergleiche
  117.                 jcxz    schon_installiert  ;ja, schon installiert
  118. ;
  119. ;installiere FOSSY
  120. ;
  121.                 lea     dx,start_text      ;Installationsmeldung
  122.                 call    text_ausgeben      ;ausgeben
  123. ;
  124. ;sichere alte Interrupts
  125. ;
  126.                 mov     al,fossil_int      ;sichere orig.Fossil-Vektor
  127.                 mov     ah,35h             ;nach old_fossil_int
  128.                 int     21h
  129.                 mov     old_fossil_int,bx
  130.                 mov     old_fossil_int+2,es
  131. ;
  132. ;gebe Umgebungsstrings frei
  133. ;
  134.                 mov     ax,umgebungsadr    ;Adresse der Umgebung im PSP
  135.                 mov     es,ax              ;Gib Umgebung durch
  136.                 mov     ah,73              ;Funktion 73 von
  137.                 int     21h                ;INT 21h frei
  138. ;
  139. ;setze die neuen Interrupts
  140. ;
  141.                 lea     dx,new_fossil_int  ;Offset
  142.                 mov     al,fossil_int      ;Nummer
  143.                 mov     ah,25h             ;setze Vektor
  144.                 int     21h
  145. ;
  146. ; reset String-Pointer
  147. ;
  148. ;               mov     dx, OFFSET pseudo_command
  149.                 mov     command_pos, dx
  150. ;
  151. ;nun beenden, aber bis zum Label INSTALLATION resident bleiben
  152. ;
  153.                 lea     dx,installation    ;Adresse von INSTALL
  154.                 mov     cl,4               ;durch das 4-malige
  155.                 shr     dx,cl              ;Schieben durch 16 teilen
  156.                 inc     dx
  157.                 xor     al,al              ;kein Fehler
  158.                 mov     ah,49              ;beende resident
  159.                 int     21h
  160. ;
  161. ;FOSSY ist schon installiert, de-installiere und gebe Meldung
  162. ;aus
  163. ;
  164. schon_installiert:
  165.                 lea     dx,schon_text      ;Meldung ausgeben
  166.                 call    text_ausgeben
  167.                 mov     ah,35h             ;orig.Int.-Vektor lesen
  168.                 mov     al,fossil_int
  169.                 int     21h
  170.                 push    ds
  171.                 mov     dx,es:old_fossil_int+2
  172.                 mov     ds,dx
  173.                 mov     dx,es:old_fossil_int
  174.                 mov     ah,25h             ;reset orig. Int.-Vektor
  175.                 int     21h
  176.                 pop     ds                 ;Speicher wieder freigeben
  177.                 mov     ah,49h
  178.                 int     21h
  179.                 mov     ax,4c00h           ;beende das Programm 
  180.                 int     21h
  181. ;
  182. ;Unterroutine: gibt ASCII-Text aus
  183. ;
  184. text_ausgeben   proc    near               ;ASCIIZ-String
  185.                 mov     ah,9               ;ueber Fkt. 9
  186.                 int     21h                ;vom INT 21h ausgeben
  187.                 ret                        ;und zurück
  188. text_ausgeben   endp
  189. ;
  190. ;
  191. start_text  db  lf,cr,lf,cr
  192.             db  'FOSSY (c) 1992 Kolja Waschk/Martin Althaus',lf,cr
  193.             db  'loaded',lf,lf,cr
  194.             db  '$'
  195. schon_text  db      lf,lf,cr
  196.             db      'FOSSY unloaded',lf,lf,cr,'$'
  197. code        ends
  198.             end     fossy
  199.